#ifndef __LRUCACHE_H__
#define __LRUCACHE_H__
#include <iostream>
#include <iterator>
#include <list>
#include <unordered_map>
#include <utility>
#include <string>
#include <mutex>
using std::cin;
using std::cout;
using std::endl;
using std::iterator;
using std::list;
using std::unordered_map;
using std::pair;
using std::string;
using std::mutex;
using std::unique_lock;

class LRUCache {
public:
    friend class MyTask;
    LRUCache(int capacity);
    
    //从缓存中取出内容
    string get(string key); 
    //将内容加入缓存
    void put(const string& key,const string& value);
private:
    int _capacity;
    list<pair<string,string>> _nodes; //存放节点,每次将新访问的节点放在最前面,用与筛选出最久未使用的节点(尾结点)
    unordered_map<string,list<pair<string,string>>::iterator> _cache; //用于查找节点
    mutex _mutex;   //用于实现对共享缓存的互斥访问
};
#endif
